import { login, getUserInfo, getUserInfoAvatar } from '@/api/user'
import {
  setToken,
  getToken,
  removeToken,
  setTimeStape,
  getTimeStape,
  removeTimeStape
} from '@/utils/auth'
import { resetRouter } from '@/router'
const state = {
  // 获取已经请求到的token
  token: getToken(),
  // 用户信息:id、头像、名字...
  userInfo: {}
}

const mutations = {
  // 1.操作token
  setToken (state, token) {
    // 存到vuex
    state.token = token
    // 2.重置token，存到本地
    setToken(token)
    // 同时保存时间戳
    setTimeStape()
  },
  // 用户信息
  userProfile (state, payload) {
    state.userInfo = payload
  },
  // 3.退出登录：
  // 3.1删除token
  removeToken (state) {
    // 删除本地储存的token
    removeToken()
    // 删除vuex中的token
    state.token = null
    removeTimeStape()
    // 重置路由规则：
    resetRouter()
  },
  // 3.2删除用户信息
  removeUserInfo (state) {
    state.userInfo = {}
  }
}

const actions = {
  // 1.请求登录
  async login (context, data) {
    try {
      // 发起登录请求，保存token
      let res = await login(data)
      // console.log(res)
      context.commit('setToken', res.data)
    } catch (error) {
      // 来到这里表示请求失败，让代码报错
      return Promise.reject(error)
    }
  },
  async getUserInfo (context) {
    // 2.用户信息请求
    let res = await getUserInfo()
    console.log(res)
    // 头像请求
    let res2 = await getUserInfoAvatar(res.data.userId)
    // console.log(res2)
    let allInfo = {
      ...res.data,
      ...res2.data
    }
    context.commit('userProfile', allInfo)
    console.log(allInfo)
    //
    return allInfo
  },
  // 3.退出登录(删除：token、用户信息)
  logout ({ commit, dispatch }) {
    commit('removeUserInfo')
    commit('removeToken')
    // 登出，清除上一个账号的多页签！
    dispatch('tagsView/delAllViews', null, { root: true })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
